from PySide2.QtWebChannel import QWebChannelAbstractTransport
from PySide2.QtCore import QByteArray, QJsonDocument, Slot
import json
class WebSocketTransport(QWebChannelAbstractTransport):
    """QWebChannelAbstractSocket implementation using a QWebSocket internally.

        The transport delegates all messages received over the QWebSocket over
        its textMessageReceived signal. Analogously, all calls to
        sendTextMessage will be sent over the QWebSocket to the remote client.
    """

    def __init__(self, socket):
        """Construct the transport object and wrap the given socket.
           The socket is also set as the parent of the transport object."""
        super().__init__(socket)
        self._socket = socket
        print(dir(socket))
        self.filesReceived = 0
        self.currentFile = None
        self._socket.textMessageReceived.connect(self.text_message_received)
        self._socket.disconnected.connect(self._disconnected)
        self._socket.binaryMessageReceived.connect(self.binary_message_received)
    def __del__(self):
        """Destroys the WebSocketTransport."""
        self._socket.deleteLater()

    def _disconnected(self):
        self.deleteLater()
    def binary_message_received(self,data):
        if self.currentFile == None:
            return
        print(self.currentFile["name"])
        print(len(data))                    
        self.filesReceived+=1
        # ws.send(json.dumps({ event: 'complete', path: currentFile.path }))
        # self.currentFile = None
        self.sendMessage({ "event": 'complete', "path": self.currentFile["path"] })
        pass
    def sendMessage(self, message):
        """Serialize the JSON message and send it as a text message via the
           WebSocket to the client."""
        doc = QJsonDocument(message)
        json_message = str(doc.toJson(QJsonDocument.Compact), "utf-8")
        self._socket.sendTextMessage(json_message)

    @Slot(str)
    def text_message_received(self, message_data_in):
        """Deserialize the stringified JSON messageData and emit
           messageReceived."""
        print(message_data_in)
        message=json.loads(message_data_in)
        # message_data = QByteArray(bytes(message_data_in, encoding='utf8'))
        # message = QJsonDocument.fromJson(message_data)
        print(message)
        self.currentFile = message
        # if message.isNull():
        #     print("Failed to parse text message as JSON object:", message_data)
        #     return
        # if not message.isObject():
        #     print("Received JSON message that is not an object: ", message_data)
        #     return
        # self.messageReceived.emit(message.object(), self)
